package hyo.hun.lifemanager;

import hyo.hun.lifemanager.common.DBSQLite;
import hyo.hun.lifemanager.common.DBSQLite.ParseSelectData;
import android.content.Context;
import android.database.Cursor;

public class DBInit
{
	private DBSQLite dbSql;
	private boolean returnFlag = false;
	/*
	private ArrayList<String> categoryOutList = new ArrayList<String>();
	private ArrayList<String> categoryInList = new ArrayList<String>();
	private ArrayList<String> categoryMoveList = new ArrayList<String>();
	private ArrayList<String> categoryOutDetailList = new ArrayList<String>();
	private ArrayList<String> categoryInDetailList = new ArrayList<String>();
	private ArrayList<String> categoryMoveDetailList = new ArrayList<String>();
	private boolean returnFlag = false;
	*/
	
	public DBInit(Context context)
	{
		dbSql = DBSQLite.getInstance(context);
	}
	
	public void setTable(Context context)
	{
		
		// today table
//		String sql = "CREATE TABLE today (" +
//		"id integer PRIMARY KEY autoincrement," +
//		"content text NOT NULL DEFAULT '');";
		
		String sql = 
				"CREATE TABLE today (" +
				"id integer PRIMARY KEY autoincrement, " +
				"text text NOT NULL DEFAULT '');";
		
		setCreateTable(context, "today", sql);
		
		//잘생긴 영훈이 데이터베이스
		
		
		
	}
	
	
	
	/*
	private void setList()
	{
		categoryOutList.add("식비");
		categoryOutList.add("쇼핑");
		categoryOutList.add("세금");
		categoryOutList.add("문화");
		categoryOutList.add("교육");
		categoryOutList.add("교통");
		categoryOutList.add("보험");
		
		categoryInList.add("월급");
		categoryInList.add("용돈");
		categoryInList.add("보험");
		
		categoryMoveList.add("적금");
		categoryMoveList.add("저축");
		categoryMoveList.add("이체");
		
		categoryInDetailList.add("회사");
		categoryInDetailList.add("부업");
	}
	*/
	
	/*
	public void setTable(Context context)
	{
		// 카테고리 기본테이블 생성
		setList();
		
		// 총금액 테이블 생성
		String sql = "CREATE TABLE total_money (" +
		"id integer PRIMARY KEY autoincrement," +
		"money text NOT NULL DEFAULT '0');";
		
		if (setCreateTable(context, "total_money", sql))
		{
			setInsertTotalMoney(context);
		}
		
		// 현금 테이블 생성
		sql = "CREATE TABLE real_money (" +
				"id integer PRIMARY KEY autoincrement," +
				"money text NOT NULL DEFAULT '0');";
		if (setCreateTable(context, "real_money", sql))
		{
			setInsertRealMoney(context);
		}
		
		// 통장금액 테이블 생성
		sql = "CREATE TABLE bank_money (" +
				"id integer PRIMARY KEY autoincrement," +
				"money text NOT NULL DEFAULT '0');";
		if (setCreateTable(context, "bank_money", sql))
		{
			setInsertBankMoney(context);
		}

		// type 종류   0 = 현금, 1 = 통장, 2 = 체크카드, 3 = 신용카드, 4 = 현금인출, 5 = 부채, 6 = 현금입금, 7 = 내통장이체
		// linktype 종류  0 = 현금 , 1 = 통장, 2 = 체크카드, 3 = 신용카드
		// deleteyn 통장 삭제 유무  0 = 삭제안됨, 1 = 삭제됨
		// 지출수입내역 테이블 생성
		sql = "CREATE TABLE in_out (" +
				"id integer PRIMARY KEY autoincrement," +
				"category text," +
				"memo text," +
				"inmoney text NOT NULL DEFAULT '0'," +
				"outmoney text NOT NULL DEFAULT '0'," +
				"postmoney text NOT NULL DEFAULT '0'," +
				"date integer," +
				"type integer," +
				"linkid integer NOT NULL DEFAULT -1," + // 현금 인출시 수수료가 연결되는 in_out 테이블의 id 값  또는 내통장 이체도
				"moneykind text," + // 통장이나 카드 이름
				"postmoneykind text, " + // 통장에서 카드대금결제시 대금결제된 카드이름
				"linktype integer NOT NULL DEFAULT -1," + // 현금 인출이나 현금입금 부채시 타입이 연결되는 값
				"deleteyn integer NOT NULL DEFAULT 0);"; // 통장이나 카드 삭제 된 여부 값
		setCreateTable(context, "in_out", sql);
		
		// 수입 카테고리 테이블 생성
		sql = "CREATE TABLE category_in_list (" +
				"id integer PRIMARY KEY autoincrement," +
				"kind text," +
				"count integer NOT NULL DEFAULT 0);";
		
		// 수입 카테고리 기본 데이터 셋팅
		if (setCreateTable(context, "category_in_list", sql))
		{
			setInsertInCategory(context);
		}
		
		// 지출 카테고리 데이블 생성
		sql = "CREATE TABLE category_out_list (" +
				"id integer PRIMARY KEY autoincrement," +
				"kind text," +
				"count integer NOT NULL DEFAULT 0);";

		// 지출 카테고리 기본 데이터 셋팅
		if (setCreateTable(context, "category_out_list", sql))
		{
			setInsertOutCategory(context);
		}
		
		// 이동 카테고리 테이블 생성
		sql = "CREATE TABLE category_move_list (" +
				"id integer PRIMARY KEY autoincrement," +
				"kind text," +
				"temp1 text," +
				"temp2 text," +
				"temp3 text," +
				"count integer NOT NULL DEFAULT 0);";
		
		// 이동 카테고리 기본 데이터 셋팅
		if (setCreateTable(context, "category_move_list", sql))
		{
			setInsertMoveCategory(context);
		}
		
//		// 수입 세부 카테고리 테이블 생성
//		sql = "CREATE TABLE category_in_detail_list (" +
//				"id integer PRIMARY KEY autoincrement," +
//				"kind text," +
//				"high integer NOT NULL DEFAULT 0" +
//				"temp1 text," +
//				"temp2 text," +
//				"temp3 text," +
//				"count integer NOT NULL DEFAULT 0);";
//		
//		// 수입 세부 카테고리 기본 데이터 셋팅
//		if (setCreateTable(context, "category_in_detail_list", sql))
//		{
//			setInsertInDetailCategory(context);
//		}
		
		// 체크카드 테이블 생성
		sql = "CREATE TABLE check_card (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," +
				"banklink integer," +
		        "message text," +
		        "autoyn integer);";
		setCreateTable(context, "check_card", sql);
		
		// 신용카드 테이블 생성
		sql = "CREATE TABLE credit_card (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," +
				"banklink integer," +
		        "message text," +
		        "autoyn integer," +
		        "outdate integer NOT NULL DEFAULT 1," +
		        "outmoney text NOT NULL DEFAULT '0'," +
		        "company text);";
		setCreateTable(context, "credit_card", sql);
		
		// 통장테이블 생성
		sql = "CREATE TABLE bankbook (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," +
				"money text NOT NULL DEFAULT '0');";
		setCreateTable(context, "bankbook", sql);
		
		// 결제문자테이블 생성
		// linkcardtype 3:신용카드 4:체크카드
		sql = "CREATE TABLE sms (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," +
//				"date text," +
				"address text," + 
//				"memo text," +
				"message text," +
				"parser text," +
				"messagecardname text, " +
				"linkcardname text," +
				"linkcardtype text);";
		setCreateTable(context, "sms", sql);
		
		// 통장 자동화 테이블 생성
		// moneytype 1 = 지출      2 = 수입 
		// kind 1 = 통장 	2 = 신용카드  
		sql = "CREATE TABLE auto_bank (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," +
				"category text," +
				"money text NOT NULL DEFAULT '0'," +
				"moneytype integer NOT NULL DEFAULT 0," +
				"kind integer NOT NULL DEFAULT 1," +
				"autodate integer," +
				"signdate integer," +
				"moneykind text," + // 통장이나 카드이름
				"memo text);";
		setCreateTable(context, "auto_bank", sql);
		
		// 빌린돈 테이블
		// type 종류  0 = 현금, 1 = 통장
		// checksign 0 = 비해결, 1 = 해결 2 = 덜해결
		sql = "CREATE TABLE fan_in (" +
				"id integer PRIMARY KEY autoincrement," +
				"type integer," +
				"name text," +
				"date integer," +
				"money text NOT NULL DEFAULT '0'," +
				"tel text," +
				"moneyname text," + // 통장 이름
				"checksign integer NOT NULL DEFAULT 0," + // 해결유무
				"linkid integer NOT NULL DEFAULT -1," + // in_out 테이블 연결 id
				"checkid integer NOT NULL DEFAULT -1," + // in_out 해결 테이블 연결 id
				"memo text);";
		setCreateTable(context, "fan_in", sql);
		
		// 받을돈 테이블
		// type 종류  0 = 현금, 2 = 체크카드, 3 = 신용카드
		// checksign 0 = 비해결, 1 = 해결 
		sql = "CREATE TABLE fan_out (" +
				"id integer PRIMARY KEY autoincrement," +
				"type integer," +
				"name text," +
				"date integer," +
				"money text NOT NULL DEFAULT '0'," +
				"tel text," +
				"moneyname text," + // 카드 이름
				"checksign integer NOT NULL DEFAULT 0," + // 해결유무
				"linkid integer NOT NULL DEFAULT -1," + // in_out 테이블 연결 id
				"checkid integer NOT NULL DEFAULT -1," + // in_out 해결 테이블 연결 id
				"memo text);";
		setCreateTable(context, "fan_out", sql);
		
		// 내통장이체 자동화 테이블 생성
		// kind 1 = 통장 	2 = 신용카드  
		sql = "CREATE TABLE auto_mybank (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," +
				"incategory text," +
				"outcategory text," +
				"money text NOT NULL DEFAULT '0'," +
				"susumoney text NOT NULL DEFAULT '0'," +
				"kind integer NOT NULL DEFAULT 1," +
				"autodate integer," +
				"signdate integer," +
				"inkind text," + // 입금통장이름
				"outkind text," + // 출금통장이름
				"memo text);";
		setCreateTable(context, "auto_mybank", sql);
		
		// 신용카드 자동이체 할부 테이블
		sql = "CREATE TABLE auto_credit_date (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," + // 카드 이름
				"monthcount integer," + // 할부개월
				"signcount integer NOT NULL DEFAULT 0," + // 할부빠져나간횟수
				"linkid integer NOT NULL DEFAULT -1)"; // 자동화 아이디
		setCreateTable(context, "auto_credit_date", sql);
		
		// 신용카드 결제예정일 테이블
		// autoyn 1 = 자동이체함, 2 = 자동이체안함
		// resultflag 1 = 이번달, 2 = 다음달,
		sql = "CREATE TABLE credit_card_result_date (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," + // 카드 이름 
				"linkname text," + // 연결통장이름 
				"autoyn integer NOT NULL DEFAULT 1," + // 자동이체 할지 않할지 값
				"startdate integer NOT NULL DEFAULT 1," + // 이전달날짜
				"enddate integer NOT NULL DEFAULT 2," + // 이번달날짜
				"resultdate integer NOT NULL DEFAULT 3," + // 돈빠지는날짜
				"resultflag integer NOT NULL DEFAULT 1," + // 돈빠지는 달처리 플래그
				"signdate integer," +
				"linkid integer NOT NULL DEFAULT -1)"; // 신용카드 아이디값
		setCreateTable(context, "credit_card_result_date", sql);
		
		// 통장 기능 테이블
		// 0 = 포함, 1 = 미포함
		sql = "CREATE TABLE bankbook_detail (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," + // 통장이름
				"addflag integer NOT NULL DEFAULT 0," + // 자산 포함 유무
				"count integer NOT NULL DEFAULT 0," + // 빈도수 카운트
				"linkid integer NOT NULL DEFAULT -1)"; // 통장아이디
		setCreateTable(context, "bankbook_detail", sql);
		
		// 지출 예산 카테고리  테이블
		sql = "CREATE TABLE budget_category (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," + // 카테고리 이름
				"money text NOT NULL DEFAULT '0'," + // 예산 금액
				"count integer NOT NULL DEFAULT 0," + // 날짜
				"linkid integer NOT NULL DEFAULT -1)"; // 카테고리 아이디
		setCreateTable(context, "budget_category", sql);
		
		// 메모 테이블
		sql = "CREATE TABLE memo_main (" +
				"id integer PRIMARY KEY autoincrement," +
				"title text NOT NULL DEFAULT ''," + // 제목
				"memo text NOT NULL DEFAULT ''," + // 내용
				"date integer NOT NULL DEFAULT 0," + // 날짜
				"temp1 text," + 
				"temp2 text," + 
				"temp3 text)"; 
		setCreateTable(context, "memo_main", sql);
		
		// 수입 예산 카테고리  테이블
		sql = "CREATE TABLE budget_in_category (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," + // 카테고리 이름
				"money text NOT NULL DEFAULT '0'," + // 예산 금액
				"count integer NOT NULL DEFAULT 0," + // 날짜
				"linkid integer NOT NULL DEFAULT -1)"; // 카테고리 아이디
		setCreateTable(context, "budget_in_category", sql);
		
		// 빠른입력 테이블 생성
		sql = "CREATE TABLE macro_list (" +
				"id integer PRIMARY KEY autoincrement," +
				"category text," +
				"memo text," +
				"inmoney text NOT NULL DEFAULT '0'," +
				"outmoney text NOT NULL DEFAULT '0'," +
				"postmoney text NOT NULL DEFAULT '0'," +
				"date integer," +
				"type integer," +
				"linkid integer NOT NULL DEFAULT -1," + // 현금 인출시 수수료가 연결되는 in_out 테이블의 id 값  또는 내통장 이체도
				"moneykind text," + // 통장이나 카드 이름
				"postmoneykind text, " + // 통장에서 카드대금결제시 대금결제된 카드이름
				"linktype integer NOT NULL DEFAULT -1," + // 현금 인출이나 현금입금 부채시 타입이 연결되는 값
				"deleteyn integer NOT NULL DEFAULT 0," + // 통장이나 카드 삭제 된 여부 값
				"title text NOT NULL DEFAULT ''," + // 제목
				"checkbox integer NOT NULL DEFAULT 0," +  
				"temp1 text," +
				"temp2 text," +
				"temp3 text);";
		setCreateTable(context, "macro_list", sql);
		
		// 이동 예산 카테고리  테이블
		sql = "CREATE TABLE budget_move_category (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," + // 카테고리 이름
				"money text NOT NULL DEFAULT '0'," + // 예산 금액
				"count integer NOT NULL DEFAULT 0," + // 날짜
				"linkid integer NOT NULL DEFAULT -1)"; // 카테고리 아이디
		setCreateTable(context, "budget_move_category", sql);
		
		// 지출수입내역 서브 테이블 생성
		// 자산 종류 0 = 현금, 1 = 통장, 2 = 체크카드, 3 = 신용카드, 4 = 현금인출, 5 = 부채, 6 = 현금입금, 7 = 내통장이체
		sql = "CREATE TABLE in_out_sub (" +
				"id integer PRIMARY KEY autoincrement," +
				"type text," + // 자산 종류
				"submoney text NOT NULL DEFAULT '0'," + // 잔액
				"realmoney text NOT NULL DEFAULT '0'," + // 현금출금, 입금시 현금 잔액
				"name text," + // 자산 이름
				"cateogory text," + // 서브 카테고리
				"temp1 text," + //
				"temp2 text," + //
				"temp3 text," + //
				"temp4 text," + //
				"temp5 text," + //
				"linkid integer NOT NULL DEFAULT -1)"; // in_out 테이블 연결된 아이디
		setCreateTable(context, "in_out_sub", sql);
		
		// 체크카드 기능 테이블
		sql = "CREATE TABLE checkcard_detail (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," + // 카드이름
				"count integer NOT NULL DEFAULT 0," + // 빈도수 카운트
				"temp1 text," + // 
				"temp2 text," + // 
				"temp3 text," + // 
				"linkid integer NOT NULL DEFAULT -1)"; // 카드아이디
		setCreateTable(context, "checkcard_detail", sql);
		
		// 신용카드 기능 테이블
		sql = "CREATE TABLE creditcard_detail (" +
				"id integer PRIMARY KEY autoincrement," +
				"name text," + // 카드이름
				"count integer NOT NULL DEFAULT 0," + // 빈도수 카운트
				"temp1 text," + // 
				"temp2 text," + // 
				"temp3 text," + // 
				"linkid integer NOT NULL DEFAULT -1)"; // 카드아이디
		setCreateTable(context, "creditcard_detail", sql);
	}

	private void setInsertTotalMoney(Context context)
	{
		HashMap<String, String> map = new HashMap<String, String>();
		map.put("money", "0");
		dbSql.insert(context, map, "total_money");
	}
	
	private void setInsertRealMoney(Context context)
	{
		HashMap<String, String> map = new HashMap<String, String>();
		map.put("money", "0");
		dbSql.insert(context, map, "real_money");
	}
	
	private void setInsertBankMoney(Context context)
	{
		HashMap<String, String> map = new HashMap<String, String>();
		map.put("money", "0");
		dbSql.insert(context, map, "bank_money");
	}
	*/
	
	
	
//	/**
//	 * 지출 카테고리 셋팅
//	 * @param context
//	 */
//	private void setInsertOutCategory(final Context context)
//	{
//		for (int i = 0; i < categoryOutList.size(); i++)
//		{
//			HashMap<String, String> map = new HashMap<String, String>();
//			map.put("kind", categoryOutList.get(i));
//			dbSql.insert(context, map, "category_out_list");
//		}
//	}
//	
//	/**
//	 * 수입 카테고리 셋팅
//	 * @param context
//	 */
//	private void setInsertInCategory(final Context context)
//	{
//		for (int i = 0; i < categoryInList.size(); i++)
//		{
//			HashMap<String, String> map = new HashMap<String, String>();
//			map.put("kind", categoryInList.get(i));
//			dbSql.insert(context, map, "category_in_list");
//		}
//	}
//	
//	/**
//	 * 이동 카테고리 셋팅
//	 * @param context
//	 */
//	private void setInsertMoveCategory(final Context context)
//	{
//		for (int i = 0; i < categoryMoveList.size(); i++)
//		{
//			HashMap<String, String> map = new HashMap<String, String>();
//			map.put("kind", categoryMoveList.get(i));
//			dbSql.insert(context, map, "category_move_list");
//		}
//	}
//	
//	/**
//	 * 수입 카테고리 셋팅
//	 * @param context
//	 */
//	private void setInsertInDetailCategory(final Context context)
//	{
//		for (int i = 0; i < categoryInDetailList.size(); i++)
//		{
//			HashMap<String, String> map = new HashMap<String, String>();
//			map.put("kind", categoryInDetailList.get(i));
//			dbSql.insert(context, map, "category_in_detail_list");
//		}
//	}

	
	/**
	 * 초기 테이블을 생성하는 메소드
	 * @param tableName 테이블이름
	 * @param sql 쿼리문
	 */
	private boolean setCreateTable(final Context context, String tableName, final String sql)
	{
		dbSql.selectMapTile(context, "SELECT tbl_name FROM sqlite_master WHERE tbl_name = '" + tableName + "'", new ParseSelectData()
		{
			@Override
			public void resultData(Cursor c)
			{
				int count = c.getCount();
				
				if (count > 0)
				{
					returnFlag = false;
					return;
				}
				
				dbSql.createTable(context, sql);
				returnFlag = true;
			}
		});
		
		return returnFlag;
	}
	
	/**
	 * 테이블을 없애는 메소드
	 * @param context
	 * @param tableName
	 */
	private void setDropTable(final Context context, final String tableName)
	{
		dbSql.selectMapTile(context, "SELECT tbl_name FROM sqlite_master WHERE tbl_name = '" + tableName + "'", new ParseSelectData()
		{
			@Override
			public void resultData(Cursor c)
			{
				int count = c.getCount();
				
				if (count > 0)
				{
					dbSql.dropTable(context, tableName);
				}
				
				return;
			}
		});
	}
	
	/**
	 * 테이블을 모두 없애버린다.
	 * @param context
	 */
	public void initDropTable(Context context)
	{
		setDropTable(context, "today");
//		setDropTable(context, "total_money");
//		setDropTable(context, "real_money");
//		setDropTable(context, "bank_money");
//		setDropTable(context, "in_out");
//		setDropTable(context, "category_in_list");
//		setDropTable(context, "category_out_list");
//		setDropTable(context, "check_card");
//		setDropTable(context, "credit_card");
//		setDropTable(context, "bankbook");
//		setDropTable(context, "sms");
//		setDropTable(context, "auto_bank");
//		setDropTable(context, "fan_in");
//		setDropTable(context, "fan_out");
//		setDropTable(context, "auto_mybank");
//		setDropTable(context, "auto_credit_date");
//		setDropTable(context, "credit_card_result_date");
//		setDropTable(context, "bankbook_detail");
//		setDropTable(context, "budget_category");
//		setDropTable(context, "memo_main");
//		setDropTable(context, "category_move_list");
//		setDropTable(context, "budget_in_category");
//		setDropTable(context, "macro_list");
//		setDropTable(context, "budget_move_category");
//		setDropTable(context, "in_out_sub");
//		setDropTable(context, "checkcard_detail");
//		setDropTable(context, "creditcard_detail");
	}
}
